import Vec2 from './Vec2'
/**
 * 判断两个投影对象是否重叠
 * @param {Object} proA 第一个对象投影
 * @param {Object} proB 第二个对象投影
 * @return {Blob} 是否相撞（重叠）
 */
var isOverlay = function (proA, proB) {
    var min = Math.min(proA.min, proB.min);
    var max = Math.max(proA.max, proB.max);
    return (proA.max - proA.min) + (proB.max - proB.min) < max - min;
}

/**
 * 圆形对象投影
 *
 * @param {Vec2} axis 坐标轴
 * @param {Number} x X轴坐标
 * @param {Number} y Y轴坐标
 * @param {Number} r 圆形半径
 * @return {Object} 阴影计算对象
 */
var getProjection = function (axis, x, y, r) {
    var pro = Vec2.dot(new Vec2(x, y), axis) / axis.length();
    return { min: pro - r, max: pro + r };
}

/**
 * 执行碰撞检查 (圆形对象碰撞检测)
 * 
 * @param {Circle} a 第一个检测对象
 * @param {Circle} b 第二个检测对象
 * @return {Blob} 是否相撞（重叠）
 * @example
 * var ans = Collision(CircleA,CircleB)
 * // ans = true 已相撞
 * // ans = flase 未相撞
 */
var Collision = function (a, b) {
    var axis = new Vec2(a.x - b.x, a.y - b.y);
    var proA = getProjection(axis, a.x, a.y, a.r),
        proB = getProjection(axis, b.x, b.y, b.r);
    return !isOverlay(proA, proB);
}

export { Collision }
